# 动物-----#哺乳类 鸟类 /能跑 能飞
# 动物
from socketserver import TCPServer, ForkingMixIn


class Animal(object):
    pass


# 哺乳动物
class Mammal(object):
    pass


# 鸟类
class Bird(object):
    pass


# 能跑的
class Runnable(object):
    def running(self):
        pass


# 能飞的
class Flyable(object):
    def fly(self):
        pass


# 狗子
class Dog(Mammal, Runnable):
    pass


# 鹦鹉
class Parrot(Bird, Flyable):
    pass


# MixIn
# 在设计类的继承关系时，通常，主线都是单一继承下来的，例如，Ostrich继承自Bird。
# 但是，如果需要“混入”额外的功能，通过多重继承就可以实现，比如，让Ostrich除了继承自Bird外，再同时继承Runnable。这种设计通常称之为MixIn。

# 能跑的
class RunnableMixIn(object):
    def running(self):
        pass


# 食肉的
class CarnivorousMixIn(object):
    def eat(self):
        pass


class DogTwo(Mammal, RunnableMixIn, CarnivorousMixIn):
    pass


dog = DogTwo()
dog.eat()


# Python自带的很多库也使用了MixIn。举个例子，Python自带了TCPServer和UDPServer这两类网络服务，而要同时服务多个用户就必须使用多进程或多线程模型，
# 这两种模型由ForkingMixIn和ThreadingMixIn提供。通过组合，我们就可以创造出合适的服务来。
# 比如，编写一个多进程模式的TCP服务，定义如下：
class MyTcpServer(TCPServer, ForkingMixIn):
    pass
